# -*- coding: utf-8 -*-
# F:\python_env\PaChong_env
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：copyAndVoluation.py
#日期：2018-05-06
#备注：本文主要介绍了python中的赋值和拷贝相关知识点       
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import copy

x1 = [1,2,1]
x2 = [1,2,1]
#x1和x2的值虽然相同，但在内存中是两个独立的不同的对象，占据不同的内存空间，就好比两个长得一样的苹果摆在桌子上，实则为两个不同的物体。
print(x1 is x2)
#==比较的是两个对象的值是否相等
print(x1 == x2)
print(id(x1))
print(id(x2))

x3 = x2
#x2和x3所指的其实是同一个对象
print(x2 is x3)

x2.append(2)
print(x2)
print(x3)

#给x2重新赋值时，相当于x2不再引用之前的对象，而引用新对象，x3依然引用之前的对象
x2 = [3,4,3]
print(x2)
print(x3)

a = [1,2,1]
ac = copy.copy(a)       #浅拷贝
adc = copy.deepcopy(a)  #深拷贝
print(ac)
print(adc)

print(a == ac ==adc)
print(a is ac)
print(a is adc)

#给a
a.append(2)
print(a)
print(ac)
print(adc)

x = [[5,6],[6,7],[7,2] ,[2,5] ,[4,9]]
xc = copy.copy(x)       #浅拷贝
xdc = copy.deepcopy(x)  #深拷贝
print(x[0] is xc[0])
print(x[0] is xdc[0])

#浅拷贝只拷贝了x的对象外壳，里面的列表还是引用x里面列表的对象，深拷贝即拷贝了x的对象外壳，而且里面的列表的对象也拷贝了
x[0].remove(5)
print(x)
print(xc)
print(xdc)


